From 104772f87a3aab04672bdf114cae06788e4e89dc Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 12 Dec 2005 19:16:00 +0000 Subject: [PATCH] Speed up stepping backwards. (#320638, Larry Ewing, Paolo Borelli) 2005-12-12 Matthias Clasen * gtk/gtktextbtree.c (_gtk_text_line_char_to_byte_offsets): * gtk/gtktextiter.c (gtk_text_iter_backward_chars): Speed up stepping backwards. (#320638, Larry Ewing, Paolo Borelli) --- ChangeLog | 4 ++++ ChangeLog.pre-2-10 | 4 ++++ gtk/gtktextbtree.c | 7 ++++++- gtk/gtktextiter.c | 14 ++++++++------ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index e2c3e5bb69..dafd4a9acf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2005-12-12 Matthias Clasen + * gtk/gtktextbtree.c (_gtk_text_line_char_to_byte_offsets): + * gtk/gtktextiter.c (gtk_text_iter_backward_chars): Speed up + stepping backwards. (#320638, Larry Ewing, Paolo Borelli) + * gtk/gtkicontheme.c (ensure_valid_themes): Only broadcast _GTK_LOAD_ICONTHEMES if we detect a real theme change, not upon initial theme load. (#323876, Peter Lund) diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index e2c3e5bb69..dafd4a9acf 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,9 @@ 2005-12-12 Matthias Clasen + * gtk/gtktextbtree.c (_gtk_text_line_char_to_byte_offsets): + * gtk/gtktextiter.c (gtk_text_iter_backward_chars): Speed up + stepping backwards. (#320638, Larry Ewing, Paolo Borelli) + * gtk/gtkicontheme.c (ensure_valid_themes): Only broadcast _GTK_LOAD_ICONTHEMES if we detect a real theme change, not upon initial theme load. (#323876, Peter Lund) diff --git a/gtk/gtktextbtree.c b/gtk/gtktextbtree.c index c323c713fa..f9b25b3f78 100644 --- a/gtk/gtktextbtree.c +++ b/gtk/gtktextbtree.c @@ -4146,7 +4146,12 @@ _gtk_text_line_char_to_byte_offsets (GtkTextLine *line, { const char *p; - p = g_utf8_offset_to_pointer (seg->body.chars, offset); + /* if in the last fourth of the segment walk backwards */ + if (seg->char_count - offset < seg->char_count / 4) + p = g_utf8_offset_to_pointer (seg->body.chars + seg->byte_count, + offset - seg->char_count); + else + p = g_utf8_offset_to_pointer (seg->body.chars, offset); *seg_byte_offset = p - seg->body.chars; diff --git a/gtk/gtktextiter.c b/gtk/gtktextiter.c index fd5b4f4c8f..a2c099bfcf 100644 --- a/gtk/gtktextiter.c +++ b/gtk/gtktextiter.c @@ -2386,23 +2386,25 @@ gtk_text_iter_backward_chars (GtkTextIter *iter, gint count) g_assert (real->segment->char_count > 0); g_assert (real->segment->type == >k_text_char_type); - real->segment_char_offset -= count; - g_assert (real->segment_char_offset >= 0); - if (real->line_byte_offset >= 0) { const char *p; gint new_byte_offset; - gint i; - p = g_utf8_offset_to_pointer (real->segment->body.chars, - real->segment_char_offset); + /* if in the last fourth of the segment walk backwards */ + if (count < real->segment_char_offset / 4) + p = g_utf8_offset_to_pointer (real->segment->body.chars + real->segment_byte_offset, + -count); + else + p = g_utf8_offset_to_pointer (real->segment->body.chars, + real->segment_char_offset - count); new_byte_offset = p - real->segment->body.chars; real->line_byte_offset -= (real->segment_byte_offset - new_byte_offset); real->segment_byte_offset = new_byte_offset; } + real->segment_char_offset -= count; real->line_char_offset -= count; adjust_char_index (real, 0 - count); -- 2.30.2